package leetcode;

/*
530. 二叉搜索树的最小绝对差
给你一棵所有节点为非负值的二叉搜索树，请你计算树中任意两节点的差的绝对值的最小值。
示例：
输入：
   1
    \
     3
    /
   2
输出：
1
解释：
最小绝对差为 1，其中 2 和 1 的差的绝对值为 1（或者 2 和 3）。
提示：
树中至少有 2 个节点。
*/

public class problems_530 {
    public static void main(String[] args) {
        TreeNode A1 = new TreeNode(1);
        TreeNode A2 = new TreeNode(2);
        TreeNode A3 = new TreeNode(2);
        TreeNode A4 = new TreeNode(3);
        TreeNode A5 = new TreeNode(4);
        TreeNode A6 = new TreeNode(4);
        TreeNode A7 = new TreeNode(3);
        A1.left = A2;
        A1.right = A3;
        A2.left = A4;
        A2.right = A5;
        A3.left = A6;
        A3.right = A7;
        int ret = new Solution().getMinimumDifference(A1);
        System.out.println(ret);
    }
    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }
    static class Solution {
        int min = Integer.MAX_VALUE;
        TreeNode preNode = null;
        public int getMinimumDifference(TreeNode root) {
            dfs(root);
            return min;
        }
        //
        private void dfs(TreeNode node){
            if(null == node) return ;
            dfs(node.left);
            if(null != preNode) min = Math.min(min, node.val - preNode.val);
            preNode = node;
            dfs(node.right);
        }
    }
}